TrivyでAMIやEBSスナップショットをセキュリティスキャンできるようになりました #reinvent
prismatixのとばち(@toda_kk)です。
先週までAWS re:Invent 2022が開催されていましたが、それに合わせたようにAqua Security社から下記のアナウンスがありました。
With AWS #reInvent this week, we're excited to share that #Trivy, the all-in-one open-source #security scanner, can now scan Virtual Machine Instances on AWS for security issues. ✨ https://t.co/fLEWKstb7A
— Aqua Security (@AquaSecTeam) December 1, 2022
脆弱性・セキュリティスキャンのためのOSSツールであるTrivyが、AMIやEBSスナップショットのスキャンに対応したという内容です。
併せて、Trivy作者である @knqyf263さん も下記のツイートをされています。
re:Invent中という事でAMIスキャンをリリースしました。AMI IDを渡すだけで脆弱性スキャンできます。MBR/GPTやXFS/EXT4などをパースするいかつい実装で多分世界で初めてVMイメージを静的解析するスキャナーです。@kumagami331 のSecHack365での成果を使わせてもらっています。https://t.co/sWRutBvuW0
— イスラエルいくべぇ (@knqyf263) December 2, 2022
TrivyとAWS
コンテナイメージの脆弱性スキャンツールとして出発したTrivyですが、現在ではその対応範囲を拡大しており、AWSに関してはアカウントレベルで脆弱な設定がされていないかセキュリティスキャンできるようになっています。
今回の対応により、クラウドにおけるセキュリティチェックだけでなく、AMI IDを渡すだけでVMイメージをセキュリティスキャンできるようになりました。また、EBSスナップショットのスキャンにも対応しています。
TrivyでAMIをスキャンしてみる
Aqua Security社から公開されていたブログ記事に具体的な手順が記載されていたので、こちらを参照しながら実際にAMIのスキャンを試してみます。
AWSアカウントにアクセス可能な環境(認証情報を設定したターミナル、AWS CloudShellなど)でTrivy 0.35.0以上をインストールした上で、trivy vm
コマンドによってAMIのスキャンを実行します。
ポイントは、AMIからEC2インスタンスを起動する必要なく、AMI IDを指定するだけでスキャンが実行できるという点です。定期的なスキャンなど、気軽に脆弱性を確認できて便利です。
試しに、Amazon Linux 2をベースとして作成しているAMIをスキャンしてみました。コンテナイメージなどをスキャンした際と同様に、脆弱性が含まれるライブラリや具体的な脆弱性の情報、重要度などが出力されます。
# ami-xxxxxxxxxxxxxxxxxにはAMI IDを指定する $ trivy vm --security-checks vuln ami:ami-xxxxxxxxxxxxxxxxx 2022-12-05T03:25:14.901Z INFO Need to update DB 2022-12-05T03:25:14.901Z INFO DB Repository: ghcr.io/aquasecurity/trivy-db 2022-12-05T03:25:14.901Z INFO Downloading DB... 35.44 MiB / 35.44 MiB [----------------------------------------------------------------------] 100.00% 18.92 MiB p/s 2.1s 2022-12-05T03:25:17.862Z INFO Vulnerability scanning is enabled 2022-12-05T03:25:18.150Z INFO Snapshot snap-xxxxxxxxxxxxxxxxx found 2022-12-05T03:30:14.702Z INFO Detected OS: amazon 2022-12-05T03:30:14.702Z INFO Detecting Amazon Linux vulnerabilities... 2022-12-05T03:30:14.714Z INFO Number of language-specific files: 1 2022-12-05T03:30:14.714Z INFO Detecting jar vulnerabilities... ami-xxxxxxxxxxxxxxxxx (amazon 2 (Karoo)) Total: 244 (UNKNOWN: 0, LOW: 2, MEDIUM: 11, HIGH: 20, CRITICAL: 0) ┌────────────────────────┬────────────────┬──────────┬────────────────────────┬────────────────────────┬──────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │ ├────────────────────────┼────────────────┼──────────┼────────────────────────┼────────────────────────┼──────────────────────────────────────────────────────────────┤ │ curl │ CVE-2022-32205 │ MEDIUM │ 7.79.1-4.amzn2.0.1 │ 7.79.1-6.amzn2.0.1 │ curl: Set-Cookie denial of service │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-32205 │ │ ├────────────────┤ │ │ ├──────────────────────────────────────────────────────────────┤ │ │ CVE-2022-32206 │ │ │ │ curl: HTTP compression denial of service │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-32206 │ │ ├────────────────┤ │ │ ├──────────────────────────────────────────────────────────────┤ │ │ CVE-2022-32208 │ │ │ │ curl: FTP-KRB bad message verification │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-32208 │ │ ├────────────────┼──────────┤ │ ├──────────────────────────────────────────────────────────────┤ │ │ CVE-2022-35252 │ LOW │ │ │ curl: control code in cookie denial of service │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-35252 │ ├────────────────────────┼────────────────┼──────────┼────────────────────────┼────────────────────────┼──────────────────────────────────────────────────────────────┤ (以下略)
また、AMIではなくEBSスナップショットに対してスキャンを実行することも可能です。この場合も、EC2インスタンスにマウントして起動するなどの必要はなく、EBSスナップショットのIDを指定するだけで実行可能です。
# snap-xxxxxxxxxxxxxxxxxにはEBSスナップショットIDを指定する $ trivy vm --security-checks vuln ebs:snap-xxxxxxxxxxxxxxxxx
マーケットプレイスなどパブリックなAMIはスキャンできない
ちなみに、AWS公式から提供されているパブリックなAMIをスキャンしようとすると、権限が足りずに失敗します。
以下は、試しに最新のAmazon Linux 2(x86_64, gp2)のAMI IDを取得した上でtrivy vm
を実行してみた結果です。
$ aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query Parameters[].Value --output text ami-0b73aa7c1d1b2e901 $ trivy vm ami:ami-0b73aa7c1d1b2e901 2022-12-05T12:28:19.246+0900 INFO Vulnerability scanning is enabled 2022-12-05T12:28:19.246+0900 INFO Secret scanning is enabled 2022-12-05T12:28:19.246+0900 INFO If your scanning is slow, please try '--security-checks vuln' to disable secret scanning 2022-12-05T12:28:19.246+0900 INFO Please see also https://aquasecurity.github.io/trivy/v0.35/docs/secret/scanning/#recommendation for faster secret detection 2022-12-05T12:28:19.480+0900 FATAL vm scan error: scan error: unable to initialize a scanner: unable to initialize a vm scanner: ec2.DescribeImages: operation error EC2: DescribeImages, https response error StatusCode: 403, RequestID: ab099414-1999-42a7-99dc-8f0ea48877e8, api error UnauthorizedOperation: You are not authorized to perform this operation.
Trivy公式ドキュメントにも、下記のように記載がありました。マーケットプレイス経由などで取得できるAMIはサポートされていないようですので、ご注意ください。
AMIs in the marketplace are not supported because the EBS direct APIs don't support that. See the AWS documentation for the detail.
また、同じく公式ドキュメントによると、スキャンを実行する際は対象のAMIやEBSスナップショットに対する下記のIAM権限が必要になるようです。
- ec2:DescribeImages(AMIをスキャンする場合のみ必要)
- ebs:ListSnapshotBlocks
- ebs:GetSnapshotBlock
Trivyのさらなる対応範囲の拡大に期待
コンテナだけでなくVMのセキュリティスキャンにまで対応したTrivyですが、CIプロセスなどにすでにコンテナイメージのスキャン用途で導入済みであれば、そのままVMにも適用できて大変使い勝手が良いと感じました。
今後もさらなるアップデートに期待しています!
以上、prismatixのとばち(@toda_kk)でした。